"""
案例：使用TPShop项目完成对登录功能的接口测试
获取验证码： http://localhost/index.php?m=Home&c=User&a=verify
登录 ： http://localhost/index.php?m=Home&c=User&a=do_login
"""

"""
注意:每個方法都共同會用到前置的setUp()及後置的tearDown()方法
# 导包
# 创建测试类(這個類需要集成unittest.TestCase)
# 创建测试方法
    # setup
        # 实例化session对象
        # 定义验证接口url地址
        # 定义登录接口url地址
    # teardown
        # 关闭session对象
    # 登录成功
        # 发送验证码请求并断言
        # 发登录请求并断言
    # 账号不存在
        # 发送验证码请求并断言
        # 发登录请求并断言
    # 密码错误
        # 发送验证码请求并断言
        # 发登录请求并断言
"""
# 导包
import requests
import unittest

# 创建测试类
class TPShopLogin(unittest.TestCase):
    # 创建测试方法
    # setup (前置方法)
    def setUp(self):
        # 实例化session对象
        self.session = requests.Session()
        # 定义验证接口url地址
        self.url_verify = "http://localhost/index.php?m=Home&c=User&a=verify"
        # 定义登錄接口url地址
        self.url_login = "http://localhost/index.php?m=Home&c=User&a=do_login"
    # teardown(後製方法)
    def tearDown(self):
        # 关闭session对象
        self.session.close()

    # 用例實現
    # test01 登录成功
    def test01_success(self):
        # 发送验证码请求并断言(get)
        response = self.session.get(url=self.url_verify)
        self.assertEqual(200, response.status_code)
        self.assertIn("image", response.headers.get("Content-Type"))
        # 发登录请求并断言(post)
        self.url_data = {
            "username": "13488888888",
            "password": "123456",
            "verify_code": "8888"
        }
        response = self.session.post(url=self.url_login, data=self.url_data)
        print("=" * 100)
        print(response.json())
        self.assertEqual(200, response.status_code)
        self.assertEqual(1, response.json().get("status"))
        self.assertIn("登陆成功", response.json().get("msg"))

    # test02 账号不存在
    def test02_user_not_exist(self):
        # 发送验证码请求并断言(get)
        response = self.session.get(url=self.url_verify)
        self.assertEqual(200, response.status_code)
        self.assertIn("image", response.headers.get("Content-Type"))
        # 发登录请求并断言(post)
        self.url_data = {
            "username": "13488888899",
            "password": "123456",
            "verify_code": "8888"
        }
        response = self.session.post(url=self.url_login, data=self.url_data)
        print("=" * 100)
        print(response.json())
        self.assertEqual(200, response.status_code)
        self.assertEqual(-1, response.json().get("status"))
        self.assertIn("账号不存在", response.json().get("msg"))

    # test03 密码错误
    def test03_password_error(self):
        # 发送验证码请求并断言(get)
        response = self.session.get(url=self.url_verify)
        self.assertEqual(200, response.status_code)
        self.assertIn("image", response.headers.get("Content-Type"))
        # 发登录请求并断言(post)
        self.url_data = {
            "username": "13488888888",
            "password": "error",
            "verify_code": "8888"
        }
        response = self.session.post(url=self.url_login, data=self.url_data)
        print("=" * 100)
        print(response.json())
        self.assertEqual(200, response.status_code)
        self.assertEqual(-2, response.json().get("status"))
        self.assertIn("密码错误", response.json().get("msg"))